/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package utils;

/**
 * Esta clase es abstracta para poder hacer sus subclases final.
 * Esto aumenta el rendimiento de todas sus subclases al no tener que pasar
 * por una vtable en cada llamada a método
 */
public abstract class Pair<L, R> {
    private final L l;
    private final R r;
    public Pair(L l, R r) {
        this.l = l;
        this.r = r;
    } 

    public L l() { return this.l; }
    public R r() { return this.r; }

    @Override
    public String toString() {
        return "(" + l() + " , " + r() + ")";
    }
    
    @Override
    public boolean equals(Object other)
    {
    	if(!(other instanceof Pair))
    	{
    		return false;
    	}
    	Pair<L,R> pother = (Pair<L,R>)other;
    	return (l.equals(pother.l()) && r.equals(pother.r()));
    }
    
}
